Projekt z eksploracji danych

Wstęp

Analiza dotyczy parametrów samochodów osobowych, wystawionych na sprzedaż za pośrednictwem portalu internetowego otomoto.pl z okolic Lublina (w promieniu 50 km).

Informacje o samochodach zostały pobrane ze strony za pomocą osobnego skryptu napisanego w R (październik 2022):

otomoto_scraping.R (Opis działania skryptu)

Czego możemy się dowiedzieć?

Analiza parametrów samochodów osobowych może obejmować wiele różnych czynników zależnych od preferencji konkretnego klienta. Przykłady parametrów, które mogą być brane pod uwagę, to m.in. moc silnika, pojemność skokowa, rodzaj paliwa, wielkość i typ nadwozia, wyposażenie, przestronność wnętrza, bezpieczeństwo i wygodę. Parametry te mogą być również porównywane między różnymi modelami samochodów, aby uzyskać informacje na temat ich wydajności, jakości i kosztów eksploatacji. Analiza parametrów samochodów osobowych może być używana do określenia najlepszej oferty cenowej w stosunku do określonych wymagań klienta.

Opis Parametrów

Zbiór danych zawiera następujące parametry:

  • id - wybrany przez nas indywidualny numer pojazdu

  • Marka_pojazdu

  • Model_pojazdu

  • Rok_produkcji

  • Przebieg - liczba przejechanych kilometrów

  • Pojemność skokowa:

    • Objętość (pojemność) skokową silnika – iloczyn objętości (pojemności) skokowej cylindra i liczby cylindrów:\[ V=\frac{\pi}{4} \cdot d^{2} \cdot s \cdot n\]
      • gdzie:

        • \(d\) - średnica cylindra

        • \(s\) - skok tłoka

        • \(n\) - liczba cylindów

  • Rodzaj_paliwa:

    Samochody osobowe mogą pracować na różnych rodzajach paliw. Najbardziej popularnyme dla samochodów osobowych to benzyna, diesel, gaz ziemny, napęd hybrydowy i energia elektryczna.

    • Benzyna jest paliwem zawierającym zwykle około 85% węglowodorów i jest używana do napędzania większości samochodów osobowych. Jest to jedno z najtańszych paliw dostępnych na rynku, a do tego jest łatwo dostępne. Jednakże jest ona również bardzo szkodliwa dla środowiska, ponieważ wytwarza duże ilości dwutlenku węgla, tlenków azotu i innych zanieczyszczeń.

    • Diesel to aktualnie najpopularniejszy rdzaj paliw stosowanych w samochodach osobowych. Paliwo to jest wysoce wydajne i ekonomiczne, dlatego zyskuje popularność wśród tych, którzy szukają oszczędności. W porównaniu z benzyną, diesel wytwarza więcej tlenków azotu i innych zanieczyszczeń, które są szkodliwe dla środowiska.

    • Gaz ziemny (LPG) jest jednym z najbardziej ekonomicznych paliw stosowanych w samochodach osobowych. Wytwarzany z naturalnych i odnawialnych źródeł, takich jak metan i węgiel. Jego wytwarzanie wytwarza mniej dwutlenku węgla i innych zanieczyszczeń niż benzyna lub diesel.

    • Napęd hybrydowy jest połączeniem benzyny i energii elektrycznej. Samochody hybrydowe wykorzystują silnik spalinowy do napędzania samochodu, ale również wykorzystują silnik elektryczny, aby wspierać pracę silnika spalinowego i zwiększyć wydajność.

    • Energia elektryczna jest coraz popularniejszym paliwem w samochodach osobowych. Samochody elektryczne nie wytwarzają żadnych szkodliwych zanieczyszczeń, co czyni je znacznie przyjazniejszymi dla środowiska. Są zazwyczaj droższe od samochodów zpalinowych, a także mają mniejszy zasięg. Problematyczna może okazać się również wymiana i utylizacja zużytej baterii.

  • Moc:

    Parametr wyrażony w koniach mechanicznych (KM), oznaczający pracę, jaką jest w stanie wykonać silnik w określonym czasie. Im wyższa jest moc, tym krótszy będzie czas potrzebny do np. rozpędzenia auta. Maksimum wynika z momentu obrotowego oraz prędkości obrotowej silnika i również jest osiągana w określonych warunkach, przeważnie w górnej skali obrotów.

  • Typ_nadwozia:

    Typy nadwozia samochodów osobowych obejmują:

    1. Sedan: Najbardziej popularny typ samochodu osobowego, charakteryzujący się czterema drzwiami i kontuarem.

    2. Kombi: Samochód osobowy z drzwiami tylnymi i konturem. W porównaniu z nadwoziem typu sedan zwiększoną pojemność bagażnika. Jest to wygodny wybór dla osób, które często transportują duże ilości bagażu.

    3. Hatchback(auta miejskie): Zazwyczaj ma cztery drzwi, kontur i szerokie tylne siedzenia.

    4. Coupe: składa się z dwóch lub trzech drzwi z zazwyczaj zmniejszoną liczbą siedzeń w porównaniu z tradycyjnym sedanem. Charakteryzuje się długim, płaskim dachem i zazwyczaj zwężonym tyłem. Coupe zazwyczaj występuje w wersji sportowej i oferuje wyższą wydajność i więcej mocy niż sedan.

    5. Kabriolet: Samochód osobowy z dachem składanym. Jest to wybór idealny dla osób, które chcą cieszyć się jazdą na otwartym powietrzu.

    6. SUV: Składa się z czterech drzwi, dwóch lub trzech rzędów siedzeń, a także zazwyczaj znacznie większego przestrzeni bagażowej niż w zwykłym sedanie. SUV-y często mają wyższy prześwit niż sedan, co pozwala im na wjazd w tereny trudniej dostępne. SUV-y są zazwyczaj bardziej wytrzymałe i mają większą moc niż zwykłe samochody osobowe.

    7. Minivan: Samochód osobowy z dużą przestrzenią w kabinie, który jest idealny dla rodzin z dziećmi.

    8. Kompakt: Mały samochód osobowy z dużym bagażnikiem, który jest wyposażony w cztery drzwi i kontur. Jest to idealny wybór dla osób, które szukają oszczędności paliwa i mniejszych rozmiarów.

    9. Auta małe: Bardzo mały samochód osobowy, który jest wyposażony w dwie lub cztery drzwi i kontur. Jest to wybór idealny dla osób, które szukają oszczędności paliwa i mniejszych rozmiarów.

  • Kolor

    Kolor samochodu może być jednym z ważniejszych wyznaczników jego wyglądu. Odcień lakieru może wpływać na to, jak samochód jest postrzegany przez innych. Niektórzy uważają, że kolor samochodu może nawet wpływać na to, jak czują się za jego kierownicą.

    Kolory samochodów są często związane z określonymi osobowościami. Na przykład, czerwony jest postrzegany jako kolor ekscytujący i dynamiczny, a czarny jest postrzegany jako kolor luksusowy i elegancki.

  • Cena

1. Czyszczenie Danych

Wczytanie danych

library(rio)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ purrr::%||%()   masks base::%||%()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(knitr)
library(ggcorrplot)

autka <- import(file="otomoto.csv")

head(autka)|>
  kable()
id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
1 Volkswagen Polo 2008 181 000 km 1 390 cm3 Benzyna 80 KM Auta miejskie Czarny 15999
2 Kia Ceed 2008 179 000 km 1 582 cm3 Diesel 115 KM Kombi Szary 13500
3 Toyota Land Cruiser 2022 2 000 km 2 755 cm3 Diesel 204 KM SUV Beżowy 287000
4 Fiat 500X 2015 89 024 km 1 368 cm3 Benzyna 140 KM Auta miejskie Inny kolor 62730
5 Toyota Prius 2009 289 820 km 1 798 cm3 Hybryda 99 KM Kompakt Szary 40500
6 Ford S-Max 2007 345 000 km 1 753 cm3 Diesel 125 KM Minivan Srebrny 17600

Poszukiwanie brakujących danych

Jeżeli w procesie pobierania danych ze strony, jakiś parametr nie został wczytany, wtedy w jego miejsce zostaje zapisana wartość następnego parametru. Oznacza to, że w przypadku pojawienia się braków, ostatnia kolumna (Cena) będzie przyjmować wartość “NA”.

autka[is.na(autka$Cena)==T,] |>
  kable()
id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
585 585 Renault Zoe 2017 60 000 km Elektryczny 40 KM Kompakt Biały 21900 NA
1000 1000 Mercedes-Benz EQC 2022 Elektryczny 408 KM SUV Szary 391288 NA NA
1001 1001 Mercedes-Benz EQS 2022 Elektryczny 523 KM Kompakt Czarny 783564 NA NA

Braki pojawiają się dla samochodów o indeksach: 585, 1000, oraz 1001. Uwagę przykuwa fakt, że są to wyłącznie samochody elektryczne. Sprawdzmy więc dodatkowo, czy to wszystkie samochody elektryczne z bazy.

elektryczne <- NULL
for(i in 1:dim(autka)[1]){
  for(j in 1:dim(autka)[2]){
    if(is.na(autka[i,j])==F) {
      if(autka[i,j]=="Elektryczny") {
        elektryczne <- append(elektryczne,i)
      }
    }
  }
}
autka[elektryczne,] |>
  kable()
id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
585 585 Renault Zoe 2017 60 000 km Elektryczny 40 KM Kompakt Biały 21900 NA
1000 1000 Mercedes-Benz EQC 2022 Elektryczny 408 KM SUV Szary 391288 NA NA
1001 1001 Mercedes-Benz EQS 2022 Elektryczny 523 KM Kompakt Czarny 783564 NA NA

Zgadza się. Tylko samochody elektryczne generują problemy z wczytywaniem danych, ponieważ nie posiadają takiego parametru jak Pojemość skokowa (przypiszmy im więc wartość 0). Dodatkowo, dla samochodów o indeksach 1000 oraz 1001 nie został wczytany parametr przebieg, może to być spowodowane tym, że są to nowe samochody, które nie przejechały jeszcze żadnej trasy. W tym przypadku również przypisujemy 0. Rodzaj paliwa uzupełniamy jako Elektryczny, a pozostałe wartości parametrów umieszczamy we właściwych kolumnach.

autka[elektryczne[1],7:11] <- autka[elektryczne[1],6:10]

autka[elektryczne[2:3],7:11] <- autka[elektryczne[2:3],5:9]
autka[elektryczne[2:3],5] <- 0
autka[elektryczne[1:3],6] <- 0

autka[elektryczne,] |>
  kable()
id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
585 585 Renault Zoe 2017 60 000 km 0 Elektryczny 40 KM Kompakt Biały 21900
1000 1000 Mercedes-Benz EQC 2022 0 0 Elektryczny 408 KM SUV Szary 391288
1001 1001 Mercedes-Benz EQS 2022 0 0 Elektryczny 523 KM Kompakt Czarny 783564

Typy danych

Tworzymy ramkę danych z poprawionej bazy danych:

    autka_dt <- data.frame(autka)
colSums(is.na(autka_dt))
##                id     Marka_pojazdu     Model_pojazdu     Rok_produkcji 
##                 0                 0                 0                 0 
##          Przebieg Pojemność_skokowa     Rodzaj_paliwa               Moc 
##                 0                 0                 0                 0 
##      Typ_nadwozia             Kolor              Cena 
##                 0                 0                 0

Duplikaty

Pozbądźmy się na wstępie ewentualnych duplikatów

autka_dt <- autka_dt[!duplicated(autka_dt),]
summary(autka_dt)
##        id         Marka_pojazdu      Model_pojazdu      Rok_produkcji 
##  Min.   :   1.0   Length:1248        Length:1248        Min.   :1961  
##  1st Qu.: 312.8   Class :character   Class :character   1st Qu.:2007  
##  Median : 624.5   Mode  :character   Mode  :character   Median :2012  
##  Mean   : 624.5                                         Mean   :2011  
##  3rd Qu.: 936.2                                         3rd Qu.:2016  
##  Max.   :1248.0                                         Max.   :2023  
##    Przebieg         Pojemność_skokowa  Rodzaj_paliwa          Moc           
##  Length:1248        Length:1248        Length:1248        Length:1248       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##  Typ_nadwozia          Kolor               Cena          
##  Length:1248        Length:1248        Length:1248       
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##                                                          
##                                                          
## 

Parametry: Marka_pojazdu, Model pojazdu, Rodzaj, Paliwa, Typ_nadwozia oraz Kolor ustawiamy na typ kategoryczny (factor).

autka_dt$Marka_pojazdu <- as.factor(autka$Marka_pojazdu)
autka_dt$Model_pojazdu <- as.factor(autka$Model_pojazdu)
autka_dt$Kolor <- as.factor(autka$Kolor)
autka_dt$Typ_nadwozia <- as.factor(autka$Typ_nadwozia)
autka_dt$Rodzaj_paliwa <- as.factor(autka$Rodzaj_paliwa)

Parametry takie jak: Przebieg,Pojemnosc,skokowa,Moc oraz Cena ustawiamy jako typ ilościowy (numeric).

autka_dt$Przebieg <- parse_number(gsub(" ","",autka_dt$Przebieg))
autka_dt$Pojemność_skokowa<- parse_number(gsub(" ","",autka_dt$Pojemność_skokowa))
autka_dt$Moc <- parse_number(gsub(" ","",autka_dt$Moc))
autka_dt$Cena <- parse_number(gsub(" ","",autka_dt$Cena))

 summary(autka_dt)
##        id            Marka_pojazdu Model_pojazdu  Rok_produkcji 
##  Min.   :   1.0   BMW       :108   A4     :  30   Min.   :1961  
##  1st Qu.: 312.8   Audi      : 96   Seria 3:  29   1st Qu.:2007  
##  Median : 624.5   Volvo     : 85   Seria 5:  24   Median :2012  
##  Mean   : 624.5   Volkswagen: 81   Passat :  22   Mean   :2011  
##  3rd Qu.: 936.2   Opel      : 80   Focus  :  21   3rd Qu.:2016  
##  Max.   :1248.0   Renault   : 80   Megane :  20   Max.   :2023  
##                   (Other)   :718   (Other):1102                 
##     Przebieg       Pojemność_skokowa     Rodzaj_paliwa      Moc       
##  Min.   :      0   Min.   :   0      Benzyna    :572   Min.   : 30.0  
##  1st Qu.: 102020   1st Qu.:1560      Benzyna+LPG: 97   1st Qu.:110.0  
##  Median : 176000   Median :1896      Diesel     :544   Median :136.0  
##  Mean   : 172701   Mean   :1933      Elektryczny:  3   Mean   :153.9  
##  3rd Qu.: 237350   3rd Qu.:1997      Hybryda    : 32   3rd Qu.:174.2  
##  Max.   :2230000   Max.   :6208                        Max.   :612.0  
##                                                                       
##         Typ_nadwozia       Kolor          Cena        
##  SUV          :312   Czarny   :301   Min.   :   1999  
##  Kombi        :243   Szary    :203   1st Qu.:  19700  
##  Sedan        :200   Srebrny  :181   Median :  36900  
##  Kompakt      :193   Biały    :169   Mean   :  59409  
##  Minivan      :125   Niebieski: 86   3rd Qu.:  63346  
##  Auta miejskie:110   Granatowy: 54   Max.   :1626016  
##  (Other)      : 65   (Other)  :254

2. Integracja Danych

Podstawowe statystyki opisowe

Przyjżyjmy się teraz podstawowym statystykom opisowym poszczególnych zmiennych.

Zmienne kotegoryczne

Marka pojazdu

autka_Marki <- autka_dt|>
  count(Marka_pojazdu) |>
  data.frame()
colnames(autka_Marki)[2] <- "Liczba_aut"

#posortowane malejąco względem liczby aut
autka_Marki_sort <- autka_Marki[order(autka_Marki$Liczba_aut, decreasing=T), ]

# % 
autka_Marki_sort_procent <- round((autka_Marki_sort$Liczba_aut*100)/dim(autka_dt)[1],2)

cbind(autka_Marki_sort,autka_Marki_sort_procent)|>
  kable(caption = "Liczba aut poszczególnych marek samochodów (malejąco)",
        col.names = c("Marka","liczba aut","% "))
Liczba aut poszczególnych marek samochodów (malejąco)
Marka liczba aut %
3 BMW 108 8.65
2 Audi 96 7.69
43 Volvo 85 6.81
42 Volkswagen 81 6.49
30 Opel 80 6.41
33 Renault 80 6.41
13 Ford 77 6.17
41 Toyota 64 5.13
26 Mercedes-Benz 55 4.41
7 Citroën 49 3.93
15 Hyundai 48 3.85
31 Peugeot 43 3.45
19 Kia 39 3.12
14 Honda 33 2.64
29 Nissan 32 2.56
36 Skoda 32 2.56
12 Fiat 27 2.16
35 Seat 27 2.16
40 Suzuki 26 2.08
25 Mazda 23 1.84
28 Mitsubishi 18 1.44
6 Chrysler 16 1.28
8 Dacia 14 1.12
27 MINI 14 1.12
1 Alfa Romeo 12 0.96
5 Chevrolet 12 0.96
18 Jeep 11 0.88
39 Subaru 10 0.80
32 Porsche 6 0.48
34 Saab 5 0.40
10 Dodge 3 0.24
16 Infiniti 3 0.24
23 Land Rover 3 0.24
24 Lexus 3 0.24
4 Cadillac 2 0.16
9 Daihatsu 2 0.16
17 Jaguar 2 0.16
22 Lancia 2 0.16
11 Ferrari 1 0.08
20 Lada 1 0.08
21 Lamborghini 1 0.08
37 Smart 1 0.08
38 SsangYong 1 0.08
library(plotly)
## 
## Dołączanie pakietu: 'plotly'
## Następujący obiekt został zakryty z 'package:ggplot2':
## 
##     last_plot
## Następujący obiekt został zakryty z 'package:rio':
## 
##     export
## Następujący obiekt został zakryty z 'package:stats':
## 
##     filter
## Następujący obiekt został zakryty z 'package:graphics':
## 
##     layout
obiekt <- ggplot(autka_Marki, aes(x=Liczba_aut,y=Marka_pojazdu, fill=Marka_pojazdu)) +
geom_bar(stat="identity")
  ggplotly(obiekt)

Najpopularniejszymi markami samochodów wystawianymi na sprzedarz w okolicach Lublina to:

BMW 8.65%

Audi 7.69%

Volvo 6.81

Model pojazdu

Analizować będziemy tylko 5 najpopularniejszych marek ( z powyższego zestawienia ). Będą to:

BMW
  top10 <- head(autka_Marki_sort[,1],n=10)
autka_Model <- autka_dt[autka_dt$Marka_pojazdu==top10[1],]|>
  count(Model_pojazdu) |>
  data.frame()
colnames(autka_Model)[2] <- "Liczba_aut"

autka_Model_sort <- autka_Model[order(autka_Model$Liczba_aut, decreasing=T), ]

autka_Model_sort_procent <- round((autka_Model_sort$Liczba_aut*100)/sum(autka_Model$Liczba_aut),2)

cbind(autka_Model_sort,autka_Model_sort_procent)|>
  kable(caption = paste("Liczba aut poszczególnych modeli marki",top10[1],"(malejąco)",sep=" "),
        col.names = c("Model","liczba aut","% "))  
Liczba aut poszczególnych modeli marki BMW (malejąco)
Model liczba aut %
4 Seria 3 29 26.85
6 Seria 5 24 22.22
12 X3 13 12.04
2 Seria 1 7 6.48
14 X5 7 6.48
8 Seria 7 6 5.56
10 X1 5 4.63
3 Seria 2 3 2.78
13 X4 3 2.78
5 Seria 4 2 1.85
11 X2 2 1.85
15 X5 M 2 1.85
16 X6 2 1.85
1 3GT 1 0.93
7 Seria 6 1 0.93
9 Seria 8 1 0.93
obiekt <- ggplot(autka_Model, aes(x =Liczba_aut,y=Model_pojazdu, fill=Model_pojazdu)) +
geom_bar(stat="identity")
  ggplotly(obiekt)
Audi
autka_Model2 <- autka_dt[autka_dt$Marka_pojazdu==top10[2],]|>
  count(Model_pojazdu) |>
  data.frame()
colnames(autka_Model2)[2] <- "Liczba_aut"

autka_Model_sort2 <- autka_Model2[order(autka_Model2$Liczba_aut, decreasing=T), ]

autka_Model_sort_procent2 <- round((autka_Model_sort2$Liczba_aut*100)/sum(autka_Model2$Liczba_aut),2)

cbind(autka_Model_sort2,autka_Model_sort_procent2)|>
  kable(caption = paste("Liczba aut poszczególnych modeli marki",top10[2],"(malejąco)",sep=" "),
        col.names = c("Model","liczba aut","% "))  
Liczba aut poszczególnych modeli marki Audi (malejąco)
Model liczba aut %
4 A4 30 31.25
6 A6 16 16.67
3 A3 15 15.62
11 Q5 7 7.29
9 A8 6 6.25
12 Q7 6 6.25
5 A5 4 4.17
10 Q3 3 3.12
2 A1 2 2.08
8 A7 2 2.08
1 80 1 1.04
7 A6 Allroad 1 1.04
13 Q8 1 1.04
14 S3 1 1.04
15 TT 1 1.04
obiekt <- ggplot(autka_Model2, aes(x =Liczba_aut,y=Model_pojazdu, fill=Model_pojazdu)) +
geom_bar(stat="identity")
  ggplotly(obiekt)
Volvo
autka_Model3 <- autka_dt[autka_dt$Marka_pojazdu==top10[3],]|>
  count(Model_pojazdu) |>
  data.frame()
colnames(autka_Model3)[2] <- "Liczba_aut"

autka_Model_sort <- autka_Model3[order(autka_Model3$Liczba_aut, decreasing=T), ]

autka_Model_sort_procent <- round((autka_Model_sort$Liczba_aut*100)/sum(autka_Model3$Liczba_aut),2)

cbind(autka_Model_sort,autka_Model_sort_procent)|>
  kable(caption = paste("Liczba aut poszczególnych modeli marki",top10[3],"(malejąco)",sep=" "),
        col.names = c("Model","liczba aut","% "))  
Liczba aut poszczególnych modeli marki Volvo (malejąco)
Model liczba aut %
12 XC 60 18 21.18
7 V50 13 15.29
6 V40 11 12.94
3 S60 9 10.59
8 V60 7 8.24
14 XC 90 7 8.24
9 V70 5 5.88
4 S80 4 4.71
11 XC 40 4 4.71
1 C30 2 2.35
2 S40 2 2.35
5 Seria 900 1 1.18
10 V90 Cross Country 1 1.18
13 XC 70 1 1.18
obiekt <- ggplot(autka_Model3, aes(x =Liczba_aut,y=Model_pojazdu, fill=Model_pojazdu)) +
geom_bar(stat="identity")
  obiekt|>ggplotly()
Volkswagen
autka_Model4 <- autka_dt[autka_dt$Marka_pojazdu==top10[4],]|>
  count(Model_pojazdu) |>
  data.frame()
colnames(autka_Model4)[2] <- "Liczba_aut"

autka_Model_sort <- autka_Model4[order(autka_Model4$Liczba_aut, decreasing=T), ]

autka_Model_sort_procent <- round((autka_Model_sort$Liczba_aut*100)/sum(autka_Model4$Liczba_aut),2)

cbind(autka_Model_sort,autka_Model_sort_procent)|>
  kable(caption = paste("Liczba aut poszczególnych modeli marki",top10[4],"(malejąco)",sep=" "),
        col.names = c("Model","liczba aut","% "))  
Liczba aut poszczególnych modeli marki Volkswagen (malejąco)
Model liczba aut %
9 Passat 22 27.16
4 Golf 19 23.46
14 Tiguan 11 13.58
10 Polo 8 9.88
5 Golf Plus 3 3.70
16 Touran 3 3.70
7 Jetta 2 2.47
8 New Beetle 2 2.47
12 Sharan 2 2.47
13 T-Roc 2 2.47
1 Arteon 1 1.23
2 Crafter 1 1.23
3 Garbus 1 1.23
6 Golf Sportsvan 1 1.23
11 Scirocco 1 1.23
15 Touareg 1 1.23
17 Transporter 1 1.23
obiekt <- ggplot(autka_Model4, aes(x =Liczba_aut,y=Model_pojazdu, fill=Model_pojazdu)) +
geom_bar(stat="identity")
  obiekt|>ggplotly()
Opel
autka_Model5 <- autka_dt[autka_dt$Marka_pojazdu==top10[5],]|>
  count(Model_pojazdu) |>
  data.frame()
colnames(autka_Model5)[2] <- "Liczba_aut"

autka_Model_sort <- autka_Model5[order(autka_Model5$Liczba_aut, decreasing=T), ]

autka_Model_sort_procent <- round((autka_Model_sort$Liczba_aut*100)/sum(autka_Model5$Liczba_aut),2)

cbind(autka_Model_sort,autka_Model_sort_procent)|>
  kable(caption = paste("Liczba aut poszczególnych modeli marki",top10[5],"(malejąco)",sep=" "),
        col.names = c("Model","liczba aut","% "))  
Liczba aut poszczególnych modeli marki Opel (malejąco)
Model liczba aut %
3 Astra 19 23.75
9 Insignia 15 18.75
5 Corsa 12 15.00
10 Meriva 7 8.75
14 Vectra 6 7.50
16 Zafira 6 7.50
11 Mokka 5 6.25
6 Crossland X 2 2.50
1 Adam 1 1.25
2 Antara 1 1.25
4 Combo 1 1.25
7 Grandland 1 1.25
8 Grandland X 1 1.25
12 Signum 1 1.25
13 Tigra 1 1.25
15 Vivaro 1 1.25
obiekt <- ggplot(autka_Model5, aes(x =Liczba_aut,y=Model_pojazdu, fill=Model_pojazdu)) +
geom_bar(stat="identity")
  obiekt|>ggplotly()

Typ nadwozia

autka_nadwozie <- autka|>
  count(Typ_nadwozia) |>
  data.frame()
colnames(autka_nadwozie)[2] <- "Liczba_aut"

autka_nadwozie_sort <- autka_nadwozie[order(autka_nadwozie$Liczba_aut, decreasing=T), ]

autka_nadwozie_sort_procent <- round((autka_nadwozie_sort$Liczba_aut*100)/sum(autka_nadwozie$Liczba_aut),2)

cbind(autka_nadwozie_sort,autka_nadwozie_sort_procent)|>
  kable(caption = paste("Typ nadwozia","(malejąco)",sep=" "),
        col.names = c("Typ nadwozia","liczba aut","% "))
Typ nadwozia (malejąco)
Typ nadwozia liczba aut %
8 SUV 312 25.00
5 Kombi 243 19.47
9 Sedan 200 16.03
6 Kompakt 193 15.46
7 Minivan 125 10.02
2 Auta miejskie 110 8.81
3 Coupe 35 2.80
1 Auta małe 20 1.60
4 Kabriolet 10 0.80
obiekt <-ggplot(autka_nadwozie,aes(x=Liczba_aut,y=Typ_nadwozia,fill=Typ_nadwozia)) +
geom_bar(stat="identity")
  obiekt|>ggplotly()

Najpopularniejszym typem nadwozia okazał się SUV.

Ludzie jeżdżą samochodami typu SUV, ponieważ są one bardziej wytrzymałe i mają lepszą przyczepność w trudnych warunkach. SUV-y mają również większą przestrzeń wewnątrz, co oznacza, że są one bardziej funkcjonalne dla rodzin i osób, które potrzebują dużej ilości miejsca do przewożenia przedmiotów. Są również bardziej wygodne i bezpieczne, ponieważ mają wyższe siedzenia i wyższy próg, co zapewnia lepszą widoczność i stabilność.

Rodzaj Paliwa

autka_paliwo <- autka|>
  count(Rodzaj_paliwa) |>
  data.frame()
colnames(autka_paliwo)[2] <- "Liczba_aut"

autka_paliwo_sort <- autka_paliwo[order(autka_paliwo$Liczba_aut, decreasing=T), ]

autka_paliwo_sort_procent <- round((autka_paliwo_sort$Liczba_aut*100)/sum(autka_paliwo$Liczba_aut),2)

cbind(autka_paliwo_sort,autka_paliwo_sort_procent)|>
  kable(caption = paste("Rodzaj paliwa","(malejąco)",sep=" "),
        col.names = c("Rodzaj paliwa","liczba aut","% "))
Rodzaj paliwa (malejąco)
Rodzaj paliwa liczba aut %
1 Benzyna 572 45.83
3 Diesel 544 43.59
2 Benzyna+LPG 97 7.77
5 Hybryda 32 2.56
4 Elektryczny 3 0.24
obiekt <-ggplot(autka_paliwo,aes(y=Liczba_aut,x=Rodzaj_paliwa,fill=Rodzaj_paliwa)) +
geom_bar(stat="identity")
  obiekt|>ggplotly()

Widzimy, że zdecydowaną większością są samochody napędzane benzyną. Ma ona wiele zalet, w tym wyższą sprawność niż inne paliwa, a także łatwość użytkowania. Niestety, benzyna ma też swoje wady, w tym wyższe emisje spalin i krótszy czas pracy niż inne paliwa. Związane jest to z procesem spalania benzyny, który jest nieco skomplikowany i wymaga większej ilości energii, niż pozostałe paliwa.

Silniki napędzane ropą mają zazwyczaj większą moc niż te napędzane innymi paliwami. Oznacza to, że są one lepsze do jazdy po autostradzie i pozwalają uzyskać wyższą prędkość maksymalną. Dodatkowo są bardziej ekonomiczne w zużyciu paliwa, dzięki czemu użytkownicy mogą zaoszczędzić na kosztach paliwa. Ogromną zaletą jest również długa żywotność silnika, co może wpływać na ich popularność.

Gaz ziemny jest znacznie bardziej ekologiczny niż benzyna lub olej napędowy, ale jest również trudniejszy w instalacji. Od użytkownika wymaga się aby przechowywać go w bezpieczny sposób. Ponadto samochody napędzane gazem ziemnym są droższe w produkcji niż samochody napędzane tradycyjnymi paliwami, co sprawia, że producenci samochodów niechętnie sięgają po te technologie. Wadą może okazać się również przymus częstego tankowania.

Hybrydy są relatywnie nowymi pojazdami na drogach, a ich popularność stale rośnie. Jednak jest to nadal rynek raczkujący, a producenci nadal udoskonalają technologię, aby zapewnić kierowcom najlepsze wrażenia z jazdy. Hybrydy są wyraźnie droższe niż tradycyjne samochody spalinowe, dlatego wielu kierowców może się wahać przy ich zakupie. Wraz z pojawieniem się nowszych technologii hybrydowe, które są coraz bardziej wydajne i wygodne, oczekuje się, że ich popularność będzie dalej rosnąć.
Dlaczego jest ich tak mało?

  • Wysoka cena. Hybrydy są zazwyczaj droższe od tradycyjnych samochodów spalinowych.

  • Trudność w utrzymaniu. Zazwyczaj są również trudniejsze w utrzymaniu niż tradycyjne samochody spalinowe, ponieważ wymagają specjalnych części i narzędzi do serwisowania.

  • Ograniczony zasięg. Hybrydy zazwyczaj mają ograniczony zasięg, ponieważ akumulatory szybko się wyczerpują.

Najmniej jest samochodów elektrycznych (3 modele w całym zbiorze). Samochody elektryczne są wciąż na wczesnym etapie rozwoju i ich popularność jest ograniczona. Głównymi przyczynamisą niska dostępność, wysokie koszty zakupu, ograniczone możliwości ładowania, krótki zasięg i brak infrastruktury ładowania. W wielu krajach nie ma dostatecznego poziomu inwestycji w infrastrukturę do ładowania, a samochody elektryczne są obciążone wysokimi podatkami. Wciąż brakuje odpowiednich środków pomocy publicznej na zakup samochodów elektrycznych, co ogranicza dostępność tych pojazdów. Dodatkową przyczyną małej ilości samochodów, jest to, że nasza baza składa się w większości z samochodów będących eksploatowacnych przez przynajmniej jednego właściciela.

Kolor

autka_kolor <- autka|>
  count(Kolor) |>
  data.frame()
colnames(autka_kolor)[2] <- "Liczba_aut"

autka_kolor_sort <- autka_kolor[order(autka_kolor$Liczba_aut, decreasing=T), ]

autka_kolor_sort_procent <- round((autka_kolor_sort$Liczba_aut*100)/sum(autka_kolor$Liczba_aut),2)

cbind(autka_kolor_sort,autka_kolor_sort_procent)|>
  kable(caption = paste("Kolory samochodów","(malejąco)",sep=" "),
        col.names = c("Kolor","liczba aut","% "))
Kolory samochodów (malejąco)
Kolor liczba aut %
6 Czarny 301 24.12
14 Szary 203 16.27
13 Srebrny 181 14.50
2 Biały 169 13.54
11 Niebieski 86 6.89
9 Granatowy 54 4.33
10 Inny kolor 52 4.17
7 Czerwony 51 4.09
4 Brązowy 38 3.04
15 Zielony 25 2.00
1 Beżowy 22 1.76
16 Złoty 22 1.76
3 Bordowy 19 1.52
5 Błękitny 8 0.64
12 Pomarańczowy 7 0.56
17 Żółty 7 0.56
8 Fioletowy 3 0.24
obiekt <-ggplot(autka_kolor,aes(x=Liczba_aut,y=Kolor,fill=Kolor)) +
geom_bar(stat="identity", fill=c("beige", "white","darkred",
                                  "brown","lightblue","black",
                                  "red","purple","darkblue",
                                  "#00A693","blue", "orange",
                                  "aliceblue","grey","green",
                                  "gold","yellow"),
                                  colour="black")
obiekt|>ggplotly()

Kolor samuchodu wybierany przez kupującego jest wyborem subiektywnym. Jednakże pojawiają się pewne przesłanki sługerujące, dlaczego pewne kolory są wybierane częściej od pozostałych:

Czarny kolor samochodu osobowego jest zazwyczaj wybierany ze względu na jego wszechstronność i uniwersalność. Jest on jednym z najbardziej popularnych kolorów samochodów osobowych, ponieważ łatwo dopasowuje się do innych kolorów, wygląda elegancko i jest łatwy w czyszczeniu. Ponadto uważany jest za symbol luksusu i statusu.

Popularność koloru szarego związana jest z uniwersalnością. Nie jest ani zbyt jasny ani zbyt ciemny, dzięki czemu pasuje do wielu stylów wystroju wnętrz. Jest również znacznie łatwiejszy do utrzymania w czystości niż inne jasne kolory. Dodatkowo, może on pomóc w zmniejszeniu temperatury wewnątrz kabiny, dzięki czemu pojazd jest bardziej komfortowy.

Srebrny podobnie jak kolor szary jest popularny ze względu na uniwersalność. Jest również łatwy w utrzymaniu, ponieważ nie ma potrzeby częstego polerowania i zabezpieczania.

Samochody w kolorze białym są łatwiejsze w utrzymaniu w czystości. Ponadto, biały kolor samochodu może pomóc w nadawaniu mu nowoczesnego wyglądu, który może zwiększyć jego wartość. Biały odcień jest również popularny ze względu na jego uniwersalny wygląd, który może pasować do każdego rodzaju otoczenia.

Zastanówmy się jeszcze, dlaczego kolory takie jak pomarańczowy czy filetowy są tak mało popularne? Oto kilka sugestii.

Fioletowe samochody są zazwyczaj wytwarzane z tańszych materiałów, co prowadzi do niższej jakości. Są również bardziej podatne na awarie i korozję, co oznacza większe koszty utrzymania. Ponadto, w porównaniu do nowych samochodów, mają mniej opcji i technologii, które są dostępne w nowych samochodach, przez co są mało atrakcyjne dla kupujących.

Pomarańczowy kolor samochodu jest zwykle uważany za zbyt odważny, zazwyczaj ludzie wolą kupować bardziej tradycyjne kolory, takie jak srebrny, czarny lub biały. Pomarańczowy samochód może wiązać się z trudnościami w utrzymaniu estetycznej czystości, ponieważ łatwo się brudzi i trudniej go wyczyścić.

  1. Zmienne ilościowe
autka_liczbowe <- autka_dt[,c(4,5,6,8,11)]

liczbowe <- apply(autka_liczbowe,2,summary)
liczbowe <- rbind(liczbowe,St.dev=apply(autka_liczbowe,2,sd))

rownames(liczbowe) <- c('minimum','kwantyl dolny','mediana','średnia','kwantyl górny','maksimum','odchylenie standardowe')
as.data.frame(liczbowe) |>
  kable(caption="Statystyki parametrów typu liczbowego",
        digits = 0)
Statystyki parametrów typu liczbowego
Rok_produkcji Przebieg Pojemność_skokowa Moc Cena
minimum 1961 0 0 30 1999
kwantyl dolny 2007 102020 1560 110 19700
mediana 2012 176000 1896 136 36900
średnia 2011 172701 1933 154 59409
kwantyl górny 2016 237350 1997 174 63346
maksimum 2023 2230000 6208 612 1626016
odchylenie standardowe 6 114166 728 74 90907

Zmienne typu liczbowego

Rok produkcji

as.data.frame(liczbowe[,1]) |>
  kable(caption="Rok produkcji",
        digits = 0,
        col.names = "Rok produkcji")
Rok produkcji
Rok produkcji
minimum 1961
kwantyl dolny 2007
mediana 2012
średnia 2011
kwantyl górny 2016
maksimum 2023
odchylenie standardowe 6
hist (autka_liczbowe[,1],
      col=c("red", "green"),
      xlab="Rok produkcji",
      ylab="Częstotliwość",
      las =2,
      main="Histogram Roku Produkcji aut")

boxplot(autka_dt$Rok_produkcji)

Widzimy, że 50% samochodów zostało wyprodukowanych w latach 2007-2016. Warością środkową są samochody z 2012 roku.

autka[autka$Rok_produkcji==1961,] |>
  kable()
id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
1171 1171 Fiat Inny 1961 79 600 km 1 295 cm3 Benzyna 65 KM Sedan Niebieski 25900

Najstarszym samochodem okazał się nr. 1171. Samochód został wyprodukowany 61 lat temu! Na podstawie histogramu wiemy, że naprawdę jest to rzadkie zjawisko. Wiemy, że samochod jest marki “FIAT”, niestety sprzedający nie podał konkretnego modelu auta. Wiemy jedynie, że jest marki FIAT. Po przeszukaniu informacji w internecie (link), udało się znaleźć informacje, że firma Fiat w 1961 roku produkowała tylko i wyłącznie poniższe samochody: Dodatkowo wiemy, że typ nadwozia to sedan, a więc zwężamy zbiór możliwości do: Analizując poszczególne modele, okazuje się że moc silnika naszego auta w porównaniu ze specyfikacjami modeli 1100 oraz 1300 jest za duża, natomiast model 1800/2100 według danych ze strony powinien mieć większą pojemność skokową silnika. Tak więc prawdopodobnie samochód z naszej bazy to właśnie Fiat 1500. Dane z bazy pokrywają się z podaną specyfikacją pojazdu.

(ciekawostka - samochody zabytkowe)

Aby auto zostało uznane za zabytek, musi spełnić kilka wytycznych, tj.:

  • ma przynajmniej 30 lat,

  • jest modelem wycofanym z produkcji przynajmniej 15 lat temu,

  • jest zbudowane przynajmniej w 75 proc. z oryginalnych części (jeżeli nie spełnia tego warunku, zostanie uznany za replikę oryginalnego modelu).

Wprawdzie zdarza się, że konserwator może wpisać do rejestru samochód, który nie ma 30 lat, ale tylko pod pewnymi warunkami. Jest to możliwe, jeżeli jest to nietypowa konstrukcja. To samo dotyczy szczególnego pochodzenia zastosowanych technologii i rozwiązań. Dlatego, jeżeli masz wyjątkowy pojazd, zwłaszcza należący w przeszłości do ważnej osobowości lub kogoś, kto osiągnął sukces sportowy itp., również możesz zarejestrować go jako samochód zabytkowy.

Sprawdźmy więc, ile samochodów z bazy spełnia pierwszy warunek (produkcja przed 1992 rokiem):

dim(autka[autka$Rok_produkcji[]<=1992,])
## [1] 10 11
autka[autka$Rok_produkcji[]<=1992,] |>
  kable( row.names = NA)
id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
377 377 Mercedes-Benz SL 1986 145 000 km 4 973 cm3 Benzyna 326 KM Kabriolet Beżowy 86000
390 390 Citroën CX 1981 1 230 000 km 2 499 cm3 Benzyna 137 KM Sedan Szary 9999
899 899 Ferrari Testarossa 1992 23 374 km 4 943 cm3 Benzyna 428 KM Coupe Czerwony 1050000
905 905 Ford Sierra 1991 110 919 km 1 998 cm3 Benzyna 120 KM Sedan Czerwony 16900
913 913 BMW Seria 7 1985 211 000 km 2 788 cm3 Benzyna 183 KM Sedan Zielony 35000
938 938 Volvo Seria 900 1992 149 500 km 1 986 cm3 Benzyna 190 KM Sedan Czarny 36900
992 992 Chevrolet Impala 1974 60 000 km 5 736 cm3 Benzyna 167 KM Sedan Niebieski 64000
1165 1165 Volkswagen Garbus 1985 10 000 km 1 300 cm3 Benzyna 30 KM Kabriolet Inny kolor 5500
1170 1170 Toyota Tercel 1979 81 804 km 1 279 cm3 Benzyna 65 KM Auta miejskie Inny kolor 15900
1171 1171 Fiat Inny 1961 79 600 km 1 295 cm3 Benzyna 65 KM Sedan Niebieski 25900

10 samochodów z bazy spełnia pierwszy warunek, aby mogły być uznane za auta zabytkowe.

Średni rok produkcji oraz mediana mają podobne wartości (2011/2012), oznacza to, że średnio oraz najcześciej sprzedawane są 10 letnie samochody.

Kwantyl dolny (2007) oraz górny (2016) infurmują, że 25% wszystkich samochodów została wyprodukowana przed 2007 rokiem, oraz 25% zostało wyprodokowanych po 2016 roku.

Dziwić może maksimum badanego parametru wynoszące 2023. (Dane pochodzą z października 2022)

autka[autka$Rok_produkcji[]==2023,] |>
  kable()
id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
613 613 Dacia Duster 2023 9 km 999 cm3 Benzyna+LPG 100 KM SUV Zielony 86550

Dostrzegamy również, że samochód ma już przejechane 9 kilometrów. (czyżby był z przyszłości !? ). Całe to zamieszanie jest spowodowane tym, że salony samochodowe nie przypisują samochodom im dokładnej daty produkcji, a tak naprawdę datę modelową, stąd na koniec każdego roku w salonach dostępna jest opcja kupna samochodu, którego rocznik jest z roku następnego. Jeżeli kupującego interesuje od kiedy samochód jest w użytku, najdokłądniejszą informacje uzyska dzięki wyczytaniu z dowodu rejestracyjnego datę pierwszej rejestracji.

Porównanie roku produkcji poszczególnych marek

autka_dt|>
  group_by(Marka_pojazdu) |>
  summarise(minimim=min(Rok_produkcji),
            średnia=mean(Rok_produkcji),
            mediana=median(Rok_produkcji),
            maksimum=max(Rok_produkcji)) |>
  kable(caption = "Statystyki roku produkcji dla poszczególnych marek ")
Statystyki roku produkcji dla poszczególnych marek
Marka_pojazdu minimim średnia mediana maksimum
Alfa Romeo 2008 2017.333 2019.0 2022
Audi 1993 2009.781 2009.5 2022
BMW 1985 2011.398 2012.0 2022
Cadillac 2004 2006.000 2006.0 2008
Chevrolet 1974 2006.250 2009.0 2013
Chrysler 2004 2013.188 2014.5 2019
Citroën 1981 2011.245 2011.0 2022
Dacia 2006 2017.500 2018.0 2023
Daihatsu 2005 2007.500 2007.5 2010
Dodge 2013 2015.000 2015.0 2017
Ferrari 1992 1992.000 1992.0 1992
Fiat 1961 2008.037 2008.0 2020
Ford 1991 2012.364 2012.0 2021
Honda 1998 2008.758 2008.0 2020
Hyundai 2007 2014.917 2014.5 2022
Infiniti 2011 2014.000 2015.0 2016
Jaguar 2014 2016.000 2016.0 2018
Jeep 1993 2007.455 2008.0 2018
Kia 2006 2015.308 2016.0 2022
Lada 1997 1997.000 1997.0 1997
Lamborghini 2005 2005.000 2005.0 2005
Lancia 2008 2011.000 2011.0 2014
Land Rover 1997 2001.000 1999.0 2007
Lexus 2000 2008.333 2008.0 2017
Mazda 2001 2011.565 2012.0 2020
Mercedes-Benz 1986 2009.164 2009.0 2022
MINI 2002 2011.929 2011.5 2022
Mitsubishi 2005 2010.889 2011.5 2017
Nissan 2000 2011.000 2011.0 2018
Opel 1998 2010.987 2011.0 2022
Peugeot 2004 2011.953 2011.0 2022
Porsche 2014 2017.833 2017.0 2022
Renault 1998 2011.925 2013.0 2022
Saab 1999 2004.800 2006.0 2008
Seat 2000 2010.185 2009.0 2020
Skoda 2001 2014.688 2016.0 2022
Smart 2016 2016.000 2016.0 2016
SsangYong 2017 2017.000 2017.0 2017
Subaru 2003 2010.200 2008.5 2019
Suzuki 1999 2010.269 2007.5 2022
Toyota 1979 2011.844 2012.5 2022
Volkswagen 1985 2010.469 2011.0 2022
Volvo 1992 2011.800 2012.0 2022

Przebieg

as.data.frame(liczbowe[,2]) |>
  kable(caption="Przebieg",
        col.names = "Przebieg")
Przebieg
Przebieg
minimum 0.0
kwantyl dolny 102019.5
mediana 176000.0
średnia 172701.2
kwantyl górny 237350.0
maksimum 2230000.0
odchylenie standardowe 114165.8
hist (autka_liczbowe[,2],
      col=c("red", "green"),
      xlab="Przebieg",
      ylab="Częstotliwość",
      las =2,
      main="Histogram Przebiegu",
      breaks = 20)

boxplot(autka_liczbowe[,2])

Na samym początku uwagę przykuwa znacząco odbiegające od wszystkich obserwacji maksimum

autka[autka$Przebieg=="2 230 000 km",] |>
  kable()
id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
430 430 Hyundai Tucson 2008 2 230 000 km 1 975 cm3 Benzyna 141 KM SUV Czarny 18900
(2230000/14)/365
## [1] 436.3992

14 letni samochód prejechał 2 230 000 km. Oznacza to, że średnio jeździł po 93 tys. km w ciągu roku oraz 436.3992172 km na dzień. Jako ciekawostka można dodać, że aby okrążyć ziemię wazdłuż równika, trzeba przejechać około 40 075 km. Nasz samochód mógłby okrążyć ziemię około 56 razy. Jako kolejna ciekawostka dla zwizualizowania jak wielka jest to odległość dodajmy, że odległość z Ziemi na Księżyc wynisi 384 400 km.

Wydaje się to dosyć nierealne i prawdopodobnie sprzedający omyłkowo wpisał o jedno “0” za dużo przy wystawianiu ogłoszenia.

Sprawdzmy srednia samochodów z 2008 roku bez naszej wartości odstającej:

przebieg <- autka_liczbowe[,2]
przebieg <- przebieg[-430]
przebieg[430]
## [1] 320000
median(przebieg)
## [1] 176000
mean(przebieg)
## [1] 171051.4
max(przebieg)
## [1] 1230000

Widzimy, że średnia oraz mediana wynoszą około 173 tys. Przyjmijmy więc opcję, że sprzedający się pomylił i podał dzeisięciokrotność przebiegu auta.

Na wykresie ramka wąsy widzimy jeszcze jedną obserwacje odstającą. Przyjżyjmy się jej dokładniej:

autka[autka$Przebieg=="1 230 000 km",] |>
  kable()
id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
390 390 Citroën CX 1981 1 230 000 km 2 499 cm3 Benzyna 137 KM Sedan Szary 9999

W tym przypadku widzimy jednak, że jest to auto 41 letnie, więc średnio jeździło 30 tys km rocznie. Wydaje się to prawdopodobne, dlatego zostawiamy tak jak jest. Zmieniamy tylko i wyłącznie samochód o identyfikatorze 430.

#przebieg to kolumna 5
autka_dt[430,5] <- 223000
  autka_liczbowe <- autka_dt[,c(4,5,6,8,11)]
  liczbowe <- apply(autka_liczbowe,2,summary)
  liczbowe <- rbind(liczbowe,St.dev=apply(autka_liczbowe,2,sd))
  rownames(liczbowe) <- c('minimum','kwantyl dolny','mediana','średnia','kwantyl górny','maksimum','odchylenie standardowe')

Wyświetlmy więc statystyki ponownie dla zmionionej obserwacji 430.

as.data.frame(liczbowe[,2]) |>
  kable(caption="Przebieg",
        col.names = "Przebieg")
Przebieg
Przebieg
minimum 0.0
kwantyl dolny 102019.5
mediana 176000.0
średnia 171093.0
kwantyl górny 237293.2
maksimum 1230000.0
odchylenie standardowe 98179.1
hist (autka_liczbowe[,2],
      col=c("red", "green"),
      xlab="Przebieg",
      ylab="Częstotliwość",
      las =2,
      main="Histogram Przebiegu")

boxplot(autka_dt$Przebieg)

Wartośćią środkową jest 176 tys. przejechanych km. Średnio samochody wystawione na sprzedarz przejechały 171 tys kilometrów. 25% samochodów ma przebieg mniejszy niż 102 tys. kilometrów oraz 25% samochodów ma przebieg większy niż 237 tys. kilometrów.

Spróbujmy teraz oszacować, jaki przebieg powinien mieć samochód, zależnie od “wieku”.

autka_dt|>
  group_by(Rok_produkcji) |>
  summarise(minimim=min(Przebieg),
            średnia=mean(Przebieg),
            mediana=median(Przebieg),
            maksimum=max(Przebieg)) |>
  kable(caption = "Statystyki przebiegu zależne od roku produckji")
Statystyki przebiegu zależne od roku produckji
Rok_produkcji minimim średnia mediana maksimum
1961 79600 79600.000 79600.0 79600
1974 60000 60000.000 60000.0 60000
1979 81804 81804.000 81804.0 81804
1981 1230000 1230000.000 1230000.0 1230000
1985 10000 110500.000 110500.0 211000
1986 145000 145000.000 145000.0 145000
1991 110919 110919.000 110919.0 110919
1992 23374 86437.000 86437.0 149500
1993 240000 390625.000 435000.0 452500
1994 158287 158287.000 158287.0 158287
1995 282000 282000.000 282000.0 282000
1997 190000 283433.429 285000.0 356100
1998 139000 235307.143 249250.0 346900
1999 131226 240360.091 240154.0 334000
2000 133000 314045.286 318509.0 456696
2001 111403 269955.417 257381.0 431000
2002 48745 238826.421 239985.0 424590
2003 77000 235796.800 234072.0 520000
2004 84481 237040.825 247550.0 369400
2005 46950 239112.667 241000.0 435000
2006 66423 219111.250 216816.0 400000
2007 98000 237766.260 226445.0 430000
2008 81000 229085.388 226000.0 379562
2009 95800 222805.662 224000.0 485000
2010 47166 210377.514 207750.0 470000
2011 84500 204057.301 209000.0 305000
2012 26326 186180.606 190000.0 371893
2013 25029 171900.600 177000.0 305000
2014 34745 170427.642 175000.0 330000
2015 33000 148359.035 142250.0 327000
2016 28800 118211.819 121968.5 195000
2017 14489 105866.171 96500.0 293000
2018 12962 86597.622 81808.0 184000
2019 11575 74254.833 55763.0 175000
2020 10600 42594.320 34000.0 220000
2021 924 16575.500 16750.0 41215
2022 0 2449.318 5.0 29000
2023 9 9.000 9.0 9

Aby było to praktyczne, dodajmy warunek, że szukamy aut do użytku, ale nienowego, czyli bierzmy pod uwagę auta z roczników 2002-2020 (młodsze niż 20 lat ale starsze niż dwuletnie).

#auta z roczników 2002-2020
autka_dt2 <- autka_dt[autka_dt$Rok_produkcji<=2020 &autka_dt$Rok_produkcji>=2002,]
autka_dt2[,"Rok_produkcji"] <- 2022-autka_dt2[,"Rok_produkcji"]
colnames(autka_dt2)[4] <- "Wiek"

autka_dt2|>
  group_by(Wiek) |>
  summarise(średnia=mean(Przebieg),
            mediana=median(Przebieg),
            odchylenie_standardowe=sd(Przebieg))|>
  kable(caption = "Statystyki przebiegu zależne od wieku samochodu",
        digits = 0,
        align="c")
Statystyki przebiegu zależne od wieku samochodu
Wiek średnia mediana odchylenie_standardowe
2 42594 34000 42606
3 74255 55763 45284
4 86598 81808 44610
5 105866 96500 56227
6 118212 121968 43320
7 148359 142250 70773
8 170428 175000 60167
9 171901 177000 56217
10 186181 190000 65797
11 204057 209000 52528
12 210378 207750 66153
13 222806 224000 67686
14 229085 226000 58672
15 237766 226445 68998
16 219111 216816 67373
17 239113 241000 64953
18 237041 247550 65047
19 235797 234072 86916
20 238826 239985 79513

Przy pomocy tego oszacowania kupujący auto może zorientować się, jaki przebieg powienien mieć samochód w zależności od wieku. Zdarzają się niestety niegodziwcy, którzy “cofają” wskaźnik licznika aby sztucznie zwiększyć wartość auta. Dzięki powyższemu zestawieniu kupującemu łatwiej jest wykryć oszustwo.

Zbudujmy dodatkowo model liniowy zależności przebieku od wieku auta:

library(stats)
hist(autka_dt2$Przebieg)

md_przebieg <- lm(Przebieg~Wiek,autka_dt2)
summary(md_przebieg)
## 
## Call:
## lm(formula = Przebieg ~ Wiek, data = autka_dt2)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -236967  -41700   -3018   37635  278635 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  59005.8     4614.9   12.79   <2e-16 ***
## Wiek         11335.3      399.2   28.39   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 62860 on 1103 degrees of freedom
## Multiple R-squared:  0.4223, Adjusted R-squared:  0.4217 
## F-statistic: 806.2 on 1 and 1103 DF,  p-value: < 2.2e-16
library(lmtest)
## Ładowanie wymaganego pakietu: zoo
## 
## Dołączanie pakietu: 'zoo'
## Następujące obiekty zostały zakryte z 'package:base':
## 
##     as.Date, as.Date.numeric
plot(md_przebieg)

  lmtest::raintest(md_przebieg)
## 
##  Rainbow test
## 
## data:  md_przebieg
## Rain = 0.92444, df1 = 553, df2 = 550, p-value = 0.8218
  cor.test(autka_dt2$Przebieg,autka_dt2$Wiek)
## 
##  Pearson's product-moment correlation
## 
## data:  autka_dt2$Przebieg and autka_dt2$Wiek
## t = 28.394, df = 1103, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.6143971 0.6826379
## sample estimates:
##       cor 
## 0.6498251
ggplot(aes(y=Przebieg,x=Wiek),data=autka_dt2)+
  geom_point()+
  geom_smooth(method = "lm")
## `geom_smooth()` using formula = 'y ~ x'

Wniosek: Na podstawie modelu możęmy wnioskować, że w ciągu jednego roku samochód przejeżdża średnio 11 tys. km +/- 400km. Jednakże powyższe zestawienie oraz wykres dopasowania wskazują, że błąd jest zaniżony. Duża zmienność przebiegu uniemożliwia nam dokładniejsze oszacowania.

Dodatkowo patrząc na wartości odchyleń standardowych z tabeli dla poszczególnego wieku wyciągamy kolejne wnioski:

Odchylenie standardowe młodszych aut ( wiek:1-6 )waha się na poziomie 4000.

Ciekawa zależność pojawia się dla starszych samochodów. Występuje tu pewien “przeskok” i wartość oschylenia standardowego starszych roczników zaczyna oscylować wokół 6000.

Oczywiście jest to tylko wskazówka, a nie dowód.

Na postawie analizy przebiegu kupujący ma przesłanki do tego, aby zapyać sprzedającego o szczegóły auta, które mogą wpływać na przebieg. np. cel użytku samochodu przez byłego właściciela.

Pojemność skokowa silnika

as.data.frame(liczbowe[,3]) |>
  kable(caption="Pojemność skokowa",
        digits = 0,
        col.names = "Pojemność skokowa")
Pojemność skokowa
Pojemność skokowa
minimum 0
kwantyl dolny 1560
mediana 1896
średnia 1933
kwantyl górny 1997
maksimum 6208
odchylenie standardowe 728
hist (autka_liczbowe[,3],
      col=c("red", "green"),
      xlab="moc",
      ylab="Częstotliwość",
      las =2,
      main="Histogram Pojemności skokowej aut")

boxplot(autka_dt$Pojemność_skokowa)

Statystyki mogą być nieco zaburzone ze względu na ustawione przez nas wartości zerowe w przypadku samochodów elektrycznych. Podczas analizowania pojemności skokowej, rozważmy więc wyłącznie samochody, które nimi nie są.

autka_dt3 <- autka_dt[-c(585,1000,1001),]
#liczbowe2 - bez elektrycznych
autka_liczbowe2 <- autka_dt3[,c(4,5,6,8,11)]
  liczbowe2 <- apply(autka_liczbowe2,2,summary)
  liczbowe2 <- rbind(liczbowe2,St.dev=apply(autka_liczbowe2,2,sd))

rownames(liczbowe2) <- c('minimum','kwantyl dolny','mediana','średnia','kwantyl górny','maksimum','odchylenie standardowe')

as.data.frame(liczbowe2[,3]) |>
  kable(caption="Pojemność skokowa",
        digits = 0,
        col.names = "Pojemność skokowa")
Pojemność skokowa
Pojemność skokowa
minimum 875
kwantyl dolny 1560
mediana 1896
średnia 1938
kwantyl górny 1997
maksimum 6208
odchylenie standardowe 723
hist (autka_liczbowe2[,3],
      col=c("red", "green"),
      xlab="Pojemność skokowa",
      ylab="Częstotliwość",
      las =2,
      main="Histogram Roku Produkcji aut")

boxplot(autka_dt3$Pojemność_skokowa)

Największa pojemność skokowa silnika wynosi: 6208. Owy silnik posiada poniższy samochód:

autka_dt[autka_dt$Pojemność_skokowa==max(autka_dt$Pojemność_skokowa),]
##        id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 1201 1201 Mercedes-Benz       Klasa C          2013    75543              6208
##      Rodzaj_paliwa Moc Typ_nadwozia Kolor   Cena
## 1201       Benzyna 507        Sedan Biały 365853

Natomiast najmniejszy to: 875.

autka_dt3[autka_dt3$Pojemność_skokowa==min(autka_dt3$Pojemność_skokowa),]
##      id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 790 790          Fiat           500          2015    33583               875
##     Rodzaj_paliwa Moc Typ_nadwozia  Kolor  Cena
## 790       Benzyna  86      Kompakt Czarny 35000

Średnio samochody mają pojemność 1.9.

Silnik 1,9 o pojemności (TDI) jest powszechnie uznawany za jeden z najlepszych, ponieważ jest wyjątkowo ekonomiczny, ma wysoką wydajność i moc, a jednocześnie cechuje go niski poziom emisji spalin. To wszystko sprawia, że jest bardzo popularny wśród kierowców, którzy korzystają z niego do samochodów osobowych i dostawczych. Dzięki swojej pojemności skokowej silnik 1,9 oferuje wystarczającą moc i wydajność w zakresie zużycia paliwa i emisji spalin. Dodatkowo jest on bardzo trwały i niezawodny, a jego konserwacja jest prosta i niedroga.

Moc silnika

Podobnie jak w poprzednim przypadku, samochody elektryczne nie będą brane pod uwagę w analizie.

as.data.frame(liczbowe2[,4]) |>
  kable(caption="Moc silnika",
        digits = 0,
        col.names = "Moc silnika")
Moc silnika
Moc silnika
minimum 30
kwantyl dolny 110
mediana 136
średnia 153
kwantyl górny 174
maksimum 612
odchylenie standardowe 73
hist (autka_liczbowe2[,4],
      col=c("red", "green"),
      xlab="Moc silnika",
      ylab="Częstotliwość",
      las =2,
      main="Histogram Mocy silnika")

boxplot(autka_dt3$Moc)

Samochód z najwyższą mocą:

autka_dt3[autka_dt3$Moc==max(autka_dt3$Moc),]
##      id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 900 900 Mercedes-Benz            CL          2004    84481              5980
##     Rodzaj_paliwa Moc Typ_nadwozia  Kolor  Cena
## 900       Benzyna 612        Coupe Czarny 2e+05

Samochód z najniższą mocą:

autka_dt3[autka_dt3$Moc==min(autka_dt3$Moc),]
##        id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 1165 1165    Volkswagen        Garbus          1985    10000              1300
##      Rodzaj_paliwa Moc Typ_nadwozia      Kolor Cena
## 1165       Benzyna  30    Kabriolet Inny kolor 5500

Średnia moc: 153KM.

Cena samochodu

as.data.frame(liczbowe[,5]) |>
  kable(caption="Cena auts",
        digits = 0,
        col.names = "Cena auta")
Cena auts
Cena auta
minimum 1999
kwantyl dolny 19700
mediana 36900
średnia 59409
kwantyl górny 63346
maksimum 1626016
odchylenie standardowe 90907
hist (autka_liczbowe[,5],
      col=c("red", "green"),
      xlab="Cena",
      ylab="Częstotliwość",
      las =2,
      main="Histogram Ceny aut",
      breaks = 50)

boxplot(autka_dt$Cena)

Na podstawie histogramu widzimy , że rozkład Ceny ma rozkład o prawostronnej asymetrii. Większość wyników oscyluje w okolicach 37 tys. zł.

Zestawienie najdroższych samochodów:

#najwiekszy
autka_dt4 <-autka_dt[autka_dt$Cena>=500000,]

#sortowanie po cenie auta
autka_dt4 <- autka_dt4[ order(autka_dt4$Cena, decreasing=T), ]

autka_dt4 |>
  kable()
id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa Rodzaj_paliwa Moc Typ_nadwozia Kolor Cena
1024 1024 Lamborghini Murcielago 2005 46950 6193 Benzyna 580 Coupe Biały 1626016
851 851 Porsche 911 2022 405 3996 Benzyna 510 Coupe Czarny 1097560
899 899 Ferrari Testarossa 1992 23374 4943 Benzyna 428 Coupe Czerwony 1050000
1001 1001 Mercedes-Benz EQS 2022 0 0 Elektryczny 523 Kompakt Czarny 783564
1224 1224 BMW Seria 8 2021 15000 4395 Benzyna 530 Coupe Szary 579900
1004 1004 Audi A8 2022 5 2967 Diesel 286 Sedan Czarny 533856
340 340 Porsche 718 Cayman 2021 27700 3995 Benzyna 400 Coupe Żółty 532000

Najtańszy samochód:

autka_dt[autka_dt$Cena==min(autka_dt$Cena),]
##      id Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 159 159         Honda         Civic          1998   289000              1396
##     Rodzaj_paliwa Moc Typ_nadwozia     Kolor Cena
## 159       Benzyna  75      Kompakt Granatowy 1999

3. Selekcja danych

Do dalszego przetwarzania danych i ewlauacji modelu można wyrzucić kolumnę z indeksami krotek

autka_dt <- subset(autka_dt,select = -1)
head(autka_dt)
##   Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 1    Volkswagen          Polo          2008   181000              1390
## 2           Kia          Ceed          2008   179000              1582
## 3        Toyota  Land Cruiser          2022     2000              2755
## 4          Fiat          500X          2015    89024              1368
## 5        Toyota         Prius          2009   289820              1798
## 6          Ford         S-Max          2007   345000              1753
##   Rodzaj_paliwa Moc  Typ_nadwozia      Kolor   Cena
## 1       Benzyna  80 Auta miejskie     Czarny  15999
## 2        Diesel 115         Kombi      Szary  13500
## 3        Diesel 204           SUV     Beżowy 287000
## 4       Benzyna 140 Auta miejskie Inny kolor  62730
## 5       Hybryda  99       Kompakt      Szary  40500
## 6        Diesel 125       Minivan    Srebrny  17600

4.Transformacja Danych

Na wcześniejszym etapie przetwarzania zbioru nadano odpowiednim cechom typy wartości numeryczne i kategoryczne.

 str(autka_dt)
## 'data.frame':    1248 obs. of  10 variables:
##  $ Marka_pojazdu    : Factor w/ 43 levels "Alfa Romeo","Audi",..: 42 19 41 12 41 13 2 3 43 33 ...
##  $ Model_pojazdu    : Factor w/ 326 levels "107","159","2",..: 214 74 178 20 215 234 223 250 295 71 ...
##  $ Rok_produkcji    : int  2008 2008 2022 2015 2009 2007 2014 2017 2008 2015 ...
##  $ Przebieg         : num  181000 179000 2000 89024 289820 ...
##  $ Pojemność_skokowa: num  1390 1582 2755 1368 1798 ...
##  $ Rodzaj_paliwa    : Factor w/ 5 levels "Benzyna","Benzyna+LPG",..: 1 3 3 1 5 3 1 3 3 1 ...
##  $ Moc              : num  80 115 204 140 99 125 272 190 110 90 ...
##  $ Typ_nadwozia     : Factor w/ 9 levels "Auta małe","Auta miejskie",..: 2 5 9 2 6 7 9 8 5 9 ...
##  $ Kolor            : Factor w/ 17 levels "Beżowy","Biały",..: 6 14 1 10 14 13 13 9 10 7 ...
##  $ Cena             : num  15999 13500 287000 62730 40500 ...
 head(autka_dt)
##   Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 1    Volkswagen          Polo          2008   181000              1390
## 2           Kia          Ceed          2008   179000              1582
## 3        Toyota  Land Cruiser          2022     2000              2755
## 4          Fiat          500X          2015    89024              1368
## 5        Toyota         Prius          2009   289820              1798
## 6          Ford         S-Max          2007   345000              1753
##   Rodzaj_paliwa Moc  Typ_nadwozia      Kolor   Cena
## 1       Benzyna  80 Auta miejskie     Czarny  15999
## 2        Diesel 115         Kombi      Szary  13500
## 3        Diesel 204           SUV     Beżowy 287000
## 4       Benzyna 140 Auta miejskie Inny kolor  62730
## 5       Hybryda  99       Kompakt      Szary  40500
## 6        Diesel 125       Minivan    Srebrny  17600

5. Eksploracja Danych

Zgodnie z przyjętym standardem usuwamy ze zbioru w poszczególnych kolumnach wartości, które nie znajdują się między pierwszym a trzecim kwantylem (Q1 -1.5IQR, Q3+1.5IQR)

Przytnij_kwartyl <- function(nazwa_kolumny,dataset)
{
  IQR_n <- IQR(autka_dt[[nazwa_kolumny]])
  TOP <- quantile(autka_dt[[nazwa_kolumny]])[[4]] + 1.5*IQR_n
  BOTTOM <- quantile(autka_dt[[nazwa_kolumny]])[[2]] - 1.5*IQR_n
  print(TOP)
  autka_dt <- autka_dt[(autka_dt[[nazwa_kolumny]] > BOTTOM),]
  autka_dt <- autka_dt[(autka_dt[[nazwa_kolumny]] < TOP),]
  # autka_dt_MM <- autka_dt_MM[(autka_dt_MM[[nazwa_kolumny]] > BOTTOM),]
  # autka_dt_MM <- autka_dt_MM[(autka_dt_MM[[nazwa_kolumny]] < TOP),]
  boxplot(autka_dt[[nazwa_kolumny]])
  # boxplot(autka_dt_MM[[nazwa_kolumny]])
}
Przytnij_kwartyl("Rok_produkcji")
## [1] 2029.5

Przytnij_kwartyl("Przebieg")
## [1] 440203.9

Przytnij_kwartyl("Pojemność_skokowa")
## [1] 2652.5

Przytnij_kwartyl("Moc")
## [1] 270.625

Przytnij_kwartyl("Cena")
## [1] 128816.2

ggcorrplot(cor(autka_liczbowe2), lab=TRUE, p.mat = cor_pmat(autka_liczbowe2))

Nie powinna dziwić wysoka korelacja między mocą silnika a pojemnością skokową. Może ona jednak być niekorzystna w dalszym przetwarzaniu. Dlatego zbudujemy dwa modele, w których wykorzystamy zbiór danych bez jednej z tych cech.

head(autka_dt)
##   Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 1    Volkswagen          Polo          2008   181000              1390
## 2           Kia          Ceed          2008   179000              1582
## 3        Toyota  Land Cruiser          2022     2000              2755
## 4          Fiat          500X          2015    89024              1368
## 5        Toyota         Prius          2009   289820              1798
## 6          Ford         S-Max          2007   345000              1753
##   Rodzaj_paliwa Moc  Typ_nadwozia      Kolor   Cena
## 1       Benzyna  80 Auta miejskie     Czarny  15999
## 2        Diesel 115         Kombi      Szary  13500
## 3        Diesel 204           SUV     Beżowy 287000
## 4       Benzyna 140 Auta miejskie Inny kolor  62730
## 5       Hybryda  99       Kompakt      Szary  40500
## 6        Diesel 125       Minivan    Srebrny  17600
autka_dt_no_eng_capacity <- subset(autka_dt,select = -5)
(head(autka_dt_no_eng_capacity))
##   Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Rodzaj_paliwa Moc
## 1    Volkswagen          Polo          2008   181000       Benzyna  80
## 2           Kia          Ceed          2008   179000        Diesel 115
## 3        Toyota  Land Cruiser          2022     2000        Diesel 204
## 4          Fiat          500X          2015    89024       Benzyna 140
## 5        Toyota         Prius          2009   289820       Hybryda  99
## 6          Ford         S-Max          2007   345000        Diesel 125
##    Typ_nadwozia      Kolor   Cena
## 1 Auta miejskie     Czarny  15999
## 2         Kombi      Szary  13500
## 3           SUV     Beżowy 287000
## 4 Auta miejskie Inny kolor  62730
## 5       Kompakt      Szary  40500
## 6       Minivan    Srebrny  17600
# autka_dt_MM_no_eng_capacity <- subset(autka_dt_MM,select = -3)

autka_dt_no_power <- subset(autka_dt,select = -7)
(head(autka_dt_no_power))
##   Marka_pojazdu Model_pojazdu Rok_produkcji Przebieg Pojemność_skokowa
## 1    Volkswagen          Polo          2008   181000              1390
## 2           Kia          Ceed          2008   179000              1582
## 3        Toyota  Land Cruiser          2022     2000              2755
## 4          Fiat          500X          2015    89024              1368
## 5        Toyota         Prius          2009   289820              1798
## 6          Ford         S-Max          2007   345000              1753
##   Rodzaj_paliwa  Typ_nadwozia      Kolor   Cena
## 1       Benzyna Auta miejskie     Czarny  15999
## 2        Diesel         Kombi      Szary  13500
## 3        Diesel           SUV     Beżowy 287000
## 4       Benzyna Auta miejskie Inny kolor  62730
## 5       Hybryda       Kompakt      Szary  40500
## 6        Diesel       Minivan    Srebrny  17600
# autka_dt_MM_no_power <- subset(autka_dt_MM,select = -4)
# autka_dt_MM_no_power

6. Ewaluacja Modeli

Zbiór danych dzielimy na zbiór treningowy i testowy w proporcjach 80%:20%

set.seed(2024)

Model regresyjny po mocy silnika.

Pomimo dużego zbioru danych, liczba różnych modeli samochodów może spowodować, że w zbiorze testowym znajdą się modele, które nie pojawiły się z zbiorze uczącym. Aby zapobiec takim problemom do podziełu zbioru posłuży nam losowanie warstwowe.

 library(caret)
## Ładowanie wymaganego pakietu: lattice
## 
## Dołączanie pakietu: 'caret'
## Następujący obiekt został zakryty z 'package:purrr':
## 
##     lift
indexes_train <- createDataPartition(autka_dt_no_eng_capacity$Model_pojazdu, p = 0.8, list = FALSE)
## Warning in createDataPartition(autka_dt_no_eng_capacity$Model_pojazdu, p = 0.8,
## : Some classes have a single record ( 107, 159, 2, 2008, 2104, 300C, 300s, 301,
## 3GT, 500X, 626, 718 Boxster, 718 Cayman, 80, 911, A6 Allroad, Adam, Altea XL,
## AMG GT, Antara, Arteon, Ateca, BLS, C-MAX, C1, C4 Cactus, C6, C8, Camry,
## Cayenne, Challenger, Charger, City, CL, CLA, Colt, Combo, Compass, Crafter,
## CTS, CX, CX-3, DS5, EcoSport, Elantra, EQC, EQS, Escape, Expert, F150, Forfour,
## FX, Garbus, GL, Golf Sportsvan, Grand Espace, Grandis, Grandland, Grandland X,
## HR-V, i10, i30 N, Impala, Inny, IS, Journey, Kamiq, Kangoo, Korando, Liana,
## Liberty, Linea, Logan, LX, Magentis, Matrix, Mito, Modus, Murcielago, Navara,
## Niro, NX, ONE, Partner, Patrol, Prius+, Pro_cee'd, ProAce, Punto, Punto 2012,
## Q8, Qubo, Range Rover Sport, RAPID, Rifter, S3, Santa Fe, Scala, Scirocco,
## Scudo, Seria 6, Seria 8, Seria 900, Seria B, Sierra, Signum, Sirion, SLK,
## Sonata, Sorento, Space Star, Tercel, Terios, Testarossa, Tigra, Toledo,
## Touareg, Tourneo Courier, Transit, Transporter, Trax, Tribeca, TT, V90 Cross
## Country, Vito, Vivaro, W124 (1984-1993), Wrangler, XC 70, XCeed, XE, XF, XL7,
## Zoe ) and these will be selected for the sample
Train_1 <- autka_dt_no_eng_capacity[indexes_train,]
Test_1 <- autka_dt_no_eng_capacity[-indexes_train,]
nrow(Test_1)
## [1] 135
Regresja1 <- glm(Cena ~ ., data=Train_1)

#summary(Regresja1)
# predictions <- predict(Regresja1, newdata = Test_1)
#Model regresyjny po mocy silnika z jednolitą nazwą modelu auta
# indexes_train <- sample(1:nrow(autka_dt_MM_no_eng_capacity), size= nrow(autka_dt_MM_no_eng_capacity)*0.8)
# 
# Train_2 <- autka_dt_MM_no_eng_capacity[indexes_train,]
# Test_2 <- autka_dt_MM_no_eng_capacity[-indexes_train,]
# nrow(Test_2)

Model regresyjny po pojemności skokowej

indexes_train <- createDataPartition(autka_dt_no_eng_capacity$Model_pojazdu, p = 0.8, list = FALSE)
## Warning in createDataPartition(autka_dt_no_eng_capacity$Model_pojazdu, p = 0.8,
## : Some classes have a single record ( 107, 159, 2, 2008, 2104, 300C, 300s, 301,
## 3GT, 500X, 626, 718 Boxster, 718 Cayman, 80, 911, A6 Allroad, Adam, Altea XL,
## AMG GT, Antara, Arteon, Ateca, BLS, C-MAX, C1, C4 Cactus, C6, C8, Camry,
## Cayenne, Challenger, Charger, City, CL, CLA, Colt, Combo, Compass, Crafter,
## CTS, CX, CX-3, DS5, EcoSport, Elantra, EQC, EQS, Escape, Expert, F150, Forfour,
## FX, Garbus, GL, Golf Sportsvan, Grand Espace, Grandis, Grandland, Grandland X,
## HR-V, i10, i30 N, Impala, Inny, IS, Journey, Kamiq, Kangoo, Korando, Liana,
## Liberty, Linea, Logan, LX, Magentis, Matrix, Mito, Modus, Murcielago, Navara,
## Niro, NX, ONE, Partner, Patrol, Prius+, Pro_cee'd, ProAce, Punto, Punto 2012,
## Q8, Qubo, Range Rover Sport, RAPID, Rifter, S3, Santa Fe, Scala, Scirocco,
## Scudo, Seria 6, Seria 8, Seria 900, Seria B, Sierra, Signum, Sirion, SLK,
## Sonata, Sorento, Space Star, Tercel, Terios, Testarossa, Tigra, Toledo,
## Touareg, Tourneo Courier, Transit, Transporter, Trax, Tribeca, TT, V90 Cross
## Country, Vito, Vivaro, W124 (1984-1993), Wrangler, XC 70, XCeed, XE, XF, XL7,
## Zoe ) and these will be selected for the sample
Train_2 <- autka_dt_no_power[indexes_train,]
Test_2 <- autka_dt_no_power[-indexes_train,]
nrow(Test_2)
## [1] 135
Regresja2 <- glm(Cena ~ ., data=Train_2)

#summary(Regresja3)
library("caret")
 RMSE(predict(Regresja1, newdata=Test_1), Test_1$Cena)
## [1] 31460.85
 RMSE(predict(Regresja2, newdata=Test_2), Test_2$Cena)
## [1] 29124.5
# RMSE(predict(Regresja3, newdata=Test_3), Test_3$Cena)
# RMSE(predict(Regresja4, newdata=Test_4), Test_4$Cena)

7. Podsumowanie

Duże błędy modelu mogą być spowodowane ograniczonymi danymi. W sytuacji sprzedaży samochodu na portalu takim jak otomoto.pl, w zdecydowanej większości mamy doczynienia z samochodami używanymi.
Na podstawie posiadanych przez nas danych ciężko jest określić, czy samochód jaki chcielibyśmy kupić jest sprawny czy wymaga dodatkowych nakładów pracy oraz kosztów.
Problematyczne okazać się mogą stostunkowo młode samochody, które są powypadkowe. Naprawa takich aut często przekracza ich cenę na portalu.

Ostatecznie spróbujmy wycenić dwa typowe auta o poniższych parametrach:

    1. Marka: BMW

    2. Model: Seria 3

    3. Rok Produkcji: 2007

    4. Przebieg: 220 000

    5. Pojemność_skokowa: 2.0

    6. Rodzaj paliwa: Benzyna

    7. Moc: 174

    8. Typ nadwozia: kombi

    9. Kolor: czarny

    1. Marka: Opel

    2. Model: Astra

    3. Rok Produkcji: 2010

    4. Przebieg: 170 000

    5. Pojemność_skokowa: 1600

    6. Rodzaj paliwa: Diesel

    7. Moc: 117

    8. Typ nadwozia: sedan

    9. Kolor: biały

        new_data <- data.frame(
          Marka_pojazdu = c("BMW", "Opel"),
          Model_pojazdu = c("Seria 3", "Astra"),
          Rok_produkcji = c(2007,2010),
          Przebieg = c(220000, 170000),
          Pojemność_skokowa = c(2000, 1600),
          Rodzaj_paliwa = c("Benzyna", "Diesel"),
    #     Moc_silnika = c(174, 160),
          Typ_nadwozia = c("Kombi", "Sedan"),
          Kolor = c("Czarny", "Biały"),
          Cena = c(0, 0)
        ) 
        predictions <- predict(Regresja2, newdata = new_data)
        print(predictions)
    ##        1        2 
    ## 19966.97 31909.10

Tak więc BMW zostało wycenione na 19966.97 zł, natomiast Opel na 31909,10 zł.